﻿using FPSO.Models.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FPSO.Services
{
    public interface ITankTaskService
    {
        void AddTask(TankTask task);
        void DeleteTask(int taskId);
        void UpdateTask(TankTask task);

		/// <summary>
		/// 根据某TaskId在WaitAndChecking的Task中找到所有相关的任务，即通过TaskId在task中找pretaskid，相同的即为后续步骤
		/// </summary>
		/// <param name="taskId"></param>
		/// <returns></returns>
		List<TankTask> GetWaitAndCheckingTaskListByTaskId(int taskId);

		/// <summary>
		/// 获取指定队列中等待执行和等待审核的任务
		/// </summary>
		/// <param name="taskQueueId"></param>
		/// <returns></returns>
		List<TankTask> GetWaitAndCheckingTaskList(int taskQueueId);
		/// <summary>
		/// 获取指定队列中等待执行和正在执行的任务
		/// </summary>
		/// <param name="taskQueueId"></param>
		/// <returns></returns>
		List<TankTask> GetWaitAndExecingTaskList(int taskQueueId);

        /// <summary>
        /// 获取指定队列中等待执行和、正在执行和待审核的任务
        /// </summary>
        /// <param name="taskQueueId"></param>
        /// <returns></returns>
        List<TankTask> GetWaitAndExecingCheckingTaskList(int taskQueueId);

        /// <summary>
        /// 获取所有待执行的任务
        /// </summary>
        /// <returns></returns>
        List<TankTask> GetAllWaitAndExecingTaskList();

		/// <summary>
		/// 获取所有待执行的任务
		/// </summary>
		/// <returns></returns>
		List<TankTask> GetAllWaitTaskList();

		/// <summary>
		/// 获取所有正在执行的任务
		/// </summary>
		/// <returns></returns>
		List<TankTask> GetAllExecingTaskList();
		
		/// <summary>
		/// 获取指定队列中正在执行的任务
		/// </summary>
		/// <param name="taskQueueId"></param>
		/// <returns></returns>
		List<TankTask> GetExecingTaskList(int taskQueueId);

        /// <summary>
        /// 获取等待执行的任务列表
        /// </summary>
        /// <param name="taskQueueId"></param>
        /// <returns></returns>
        List<TankTask> GetWaitingTaskList(int taskQueueId);

        /// <summary>
        /// 获取所有等待和待确认的任务
        /// </summary>
        /// <param name="taskQueueId"></param>
        /// <returns></returns>
        List<TankTask> GetAllWaitingAndCheckingTaskList();

        /// <summary>
        /// 获取所有等待,正在执行和待确认的任务
        /// </summary>
        /// <param name="taskQueueId"></param>
        /// <returns></returns>
        List<TankTask> GetAllWaitAndExecingAndCheckingTaskList();

        TankTask GetTask(int taskId);

		//通过taskId在task中找pretaskid，相同的即为后续步骤
		TankTask GetFollowTask(int taskId);

		/// <summary>
		/// 指定的任务队列中在某个时间后是否有更新
		/// </summary>
		/// <param name="queueId">队列ID</param>
		/// <param name="reflushTime">刷新时间</param>
		/// <returns></returns>
		bool IsTaskUpdate(int queueId, DateTime reflushTime);

    }
}
